package com.disruptor.demo.factory;

import com.disruptor.demo.event.SeckillOrderEvent;
import com.lmax.disruptor.EventFactory;

/**
 * 秒杀订单事件工厂类
 * 功能：实现Disruptor的EventFactory接口，负责创建SeckillOrderEvent事件实例
 * 核心作用：在Disruptor初始化RingBuffer时，预创建所有事件对象（数量=ring-buffer-size），避免运行时频繁创建对象导致的GC开销，是Disruptor高性能的关键优化点之一
 */
public class SeckillOrderEventFactory implements EventFactory<SeckillOrderEvent> {

    /**
     * 创建一个初始化状态的SeckillOrderEvent实例
     * Disruptor机制：RingBuffer启动时会调用该方法，按ring-buffer-size预创建所有事件对象并存储在缓冲区中，后续事件发布时直接复用这些对象（修改字段值），而非重新创建
     *
     * @return 初始化完成的SeckillOrderEvent对象，包含默认状态
     */
    @Override
    public SeckillOrderEvent newInstance() {
        SeckillOrderEvent event = new SeckillOrderEvent();
        // 初始化事件状态：设置默认处理状态为"INIT"（未处理），确保事件在复用前有统一初始状态
        event.setProcessStatus("INIT");
        // 初始化重试次数为0：新事件默认无重试记录，失败时由异常处理器递增
        event.setRetryCount(0);
        return event;
    }
}
